import { axiosInstance } from './axiosHelper'

/**
 * 用户登录请求DTO
 */
interface LoginCredentials {
    username: string  // 用户名，长度3-50
    password: string  // 密码，长度6-50
    captchaGuid?: string  // 验证码GUID
    captchaCode?: string  // 验证码
    rememberMe?: boolean  // 前端扩展字段，非API要求
}

/**
 * API返回结果
 */
interface ApiResult<T> {
    code: number
    message: string | null
    data: T | null
    timestamp: number
    success: boolean
}

/**
 * 登录响应
 */
type LoginResponse = ApiResult<string>

/**
 * 用户注册请求DTO
 */
interface RegisterRequest {
    username: string       // 用户名
    password: string       // 密码
    realName?: string      // 真实姓名（可选）
    email?: string         // 电子邮箱（可选）
    gender?: number        // 性别（0-未知，1-男，2-女）
}

/**
 * 用户注册响应
 */
type RegisterResponse = ApiResult<string>

export const userService = {
    /**
     * 用户登录
     * @param credentials 登录凭证
     * @returns 登录响应
     */
    async login(credentials: LoginCredentials): Promise<LoginResponse> {
        try {
            const response = await axiosInstance.post('/api/User/Login', {
                username: credentials.username,
                password: credentials.password,
                // captchaGuid: credentials.captchaGuid,
                // captchaCode: credentials.captchaCode
            })

            // 如果登录成功且返回了token
            if (response.data.success && response.data.data) {
                // 保存token
                localStorage.setItem('token', response.data.data)
                // 设置请求头
                axiosInstance.defaults.headers.common['Authorization'] = `Bearer ${response.data.data}`

                // 如果需要记住登录状态，设置额外标记
                if (credentials.rememberMe) {
                    localStorage.setItem('remember_login', 'true')
                }
            }
            return response.data
        } catch (error) {
            console.error('登录失败:', error)
            return {
                code: 500,
                message: '登录失败，请稍后再试',
                data: null,
                timestamp: Date.now(),
                success: false
            }
        }
    },

    /**
     * 用户登出
     */
    logout(): void {
        localStorage.removeItem('token')
        localStorage.removeItem('remember_login')
        delete axiosInstance.defaults.headers.common['Authorization']
    },

    /**
     * 检查用户是否已认证
     * @returns 认证状态
     */
    isAuthenticated(): boolean {
        return !!localStorage.getItem('token')
    },

    /**
     * 获取当前用户信息
     * @returns 用户信息
     */
    async getCurrentUser() {
        try {
            const response = await axiosInstance.get('/api/User/Info')
            return response.data
        } catch (error) {
            console.error('获取用户信息失败:', error)
            return null
        }
    },

    /**
     * 用户注册
     * @param registerData 注册数据
     * @returns 注册响应
     */
    async register(registerData: RegisterRequest): Promise<RegisterResponse> {
        try {
            const response = await axiosInstance.post('/api/User/Register', {
                username: registerData.username,
                password: registerData.password,
                realName: registerData.realName,
                email: registerData.email,
                gender: registerData.gender !== undefined ? registerData.gender : 0
            })
            return response.data
        } catch (error) {
            console.error('注册失败:', error)
            return {
                code: 500,
                message: '注册失败，请稍后再试',
                data: null,
                timestamp: Date.now(),
                success: false
            }
        }
    }
} 